package IA;

import Motor.Carta;
import Motor.Habilidad;
import Motor.Hero;
import Motor.Juego;
import Motor.Luchador;
import Motor.Player;


public class Accion {
	
	//Acciones posibles
	//0 -> pasar
	//1 -> hero1	
	//2 -> hero2
	//3 -> hero3
	//4 -> hero4
	//5 -> hab1	
	//6 -> hab2
	//7 -> hab3
	//8 -> pill1
	//9 -> pill2	
	//10 -> pill3
	//11 -> pill4
	//12 -> pill5
	//13 -> pill6
	
	private Estado estado;
	private int operacion;
	
	public Accion(Estado s,int op){
		estado=s;
		operacion=op;
	}
	
	public Estado getResult(int n) {
		Carta h;
		Luchador l;
		Player j;
		Estado eCopy=estado.copiar();
		switch(operacion){
		case 0:
			if(eCopy.getFase()==5&&eCopy.getTurno()==1){
				Luchador[] auxL=new Luchador[eCopy.numJugadores()];
				Player[] auxP =new Player[eCopy.numJugadores()];
				for(int i=0;i<eCopy.numJugadores();i++){
					auxL[i]=eCopy.getLuchador(i);
					auxP[i]=eCopy.getJugador(i);
				}
				Juego ju=new Juego(auxP,auxL);
				ju.resolverCombate();
				// Cambiamos el turno de los jugadores;
				Player aux;
				aux = eCopy.getJugador(0);
				eCopy.setJugador(eCopy.getJugador(1),0);
				eCopy.setJugador(aux,1);
				// Roban Cartas
				eCopy.getJugador(0).robarCarta();
				eCopy.getJugador(1).robarCarta();
				// reseteamos los luchadores
				eCopy.getLuchador(0).reset();
				eCopy.getLuchador(1).reset();
			}
			break;
		case 1:
			h= eCopy.getJugador(n).usarHero(0);
			l=eCopy.getLuchador(n);
			l.setHero((Hero) h);
			break;
		case 2:
			h= eCopy.getJugador(n).usarHero(1);
			l=eCopy.getLuchador(n);
			l.setHero((Hero) h);
			break;
		case 3:
			h= eCopy.getJugador(n).usarHero(2);
			l=eCopy.getLuchador(n);
			l.setHero((Hero) h);
			break;
		case 4:
			h= eCopy.getJugador(n).usarHero(3);
			l=eCopy.getLuchador(n);
			l.setHero((Hero) h);
			break;
		case 5: 
			if (eCopy.getFase()==1){
				//Cojo la carta de la mano y pongo -1
				h= eCopy.getJugador(n).usar(0);
				//Equipo al Luchador
				l=eCopy.getLuchador(n);
				l.getHero().setEquipo((Habilidad) h);	
				//Ekipo a mi Heroe
				Hero hero = (Hero) eCopy.j.getJugador()[n].getHeros()
						.buscarCarta(l.getHero().getId());
				hero.setHabilidad0((Habilidad)h);
			}else if(eCopy.getFase()==3){
				h= eCopy.getJugador(n).usar(0);
				l=eCopy.getLuchador(n);
				l.setHabilidad1((Habilidad) h);
			}
			break;
		case 6:
			if (eCopy.getFase()==1){
				h= eCopy.getJugador(n).usar(1);
				//Equipo al Luchador
				l=eCopy.getLuchador(n);
				l.getHero().setEquipo((Habilidad) h.copiar());	
				//Ekipo a mi Heroe
				Hero hero = (Hero) eCopy.j.getJugador()[n].getHeros()
						.buscarCarta(l.getHero().getId());
				hero.setHabilidad0((Habilidad)h.copiar());
			}else if(eCopy.getFase()==3){
				h= eCopy.getJugador(n).usar(1);
				l=eCopy.getLuchador(n);
				l.setHabilidad1((Habilidad) h);
			}
			break;
		case 7:
			if (eCopy.getFase()==1){
				h= eCopy.getJugador(n).usar(2);
				//Equipo al Luchador
				l=eCopy.getLuchador(n);
				l.getHero().setEquipo((Habilidad) h.copiar());	
				//Ekipo a mi Heroe
				Hero hero = (Hero) eCopy.j.getJugador()[n].getHeros()
						.buscarCarta(l.getHero().getId());
				hero.setHabilidad0((Habilidad)h.copiar());
			}else if(eCopy.getFase()==3){
				h= eCopy.getJugador(n).usar(2);
				l=eCopy.getLuchador(n);
				l.setHabilidad1((Habilidad) h);
			}
			break;
		case 8:
			l=eCopy.getLuchador(n);
			j=eCopy.getJugador(n);
			j.setPillz(j.getPillz()-1);
			l.setPillz(1);
			break;
		case 9:
			l=eCopy.getLuchador(n);
			j=eCopy.getJugador(n);
			j.setPillz(j.getPillz()-2);
			l.setPillz(2);
			break;
		case 10:
			l=eCopy.getLuchador(n);
			j=eCopy.getJugador(n);
			j.setPillz(j.getPillz()-3);
			l.setPillz(3);
			break;
		case 11:
			l=eCopy.getLuchador(n);
			j=eCopy.getJugador(n);
			j.setPillz(j.getPillz()-4);
			l.setPillz(4);
			break;
		case 12:
			l=eCopy.getLuchador(n);
			j=eCopy.getJugador(n);
			j.setPillz(j.getPillz()-5);
			l.setPillz(5);
			break;
		case 13:
			l=eCopy.getLuchador(n);
			j=eCopy.getJugador(n);
			j.setPillz(j.getPillz()-6);
			l.setPillz(6);
			break;
		}
		eCopy.setTurno((eCopy.getTurno()+1)%eCopy.numJugadores());
		if(eCopy.getTurno()==0){
			eCopy.setFase((eCopy.getFase()+1)%6);
		}
		return eCopy;
	}

	public int getOperacion() {
		return operacion;
	}
}
